package pl.kaczanowscy.tomek.ipdl;

import pl.kaczanowscy.tomek.ipdl.enums.Move;

/**
 * Common interface for classes describing results of the round of game.
 * 
 * @author Tomasz Kaczanowski
 */
public interface RoundResult {
	/**
	 * Returns move made by strategy.
	 * 
	 * @param strategy
	 *            strategy
	 * @return move made by strategy
	 */
	Move getMove(Strategy strategy);

	/**
	 * Returns move made by the opponent.
	 * 
	 * @param strategy
	 *            strategy
	 * @return move made by opponent
	 */
	Move getOpponentMove(Strategy strategy);

	/**
	 * Returns payoff earned by strategy.
	 * 
	 * @param strategy
	 *            strategy
	 * @return strategy's payoff, or 0 if there is no payoff for this strategy
	 */
	int getPayoff(Strategy strategy);

	/**
	 * Returns payoff earned by the opponent.
	 * 
	 * @param strategy
	 *            strategy
	 * @return opponent's payoff, or 0 if there is no payoff for strategy's
	 *         opponent
	 */
	int getOpponentPayoff(Strategy strategy);

}
